import typing


class Serializable:
    _exclude_fields = ()

    def __init__(self, *args, **kwargs):
        """
        定义*args，**kwargs参数，接受任何参数
        """
        self.__dict__.update(kwargs)

    def keys(self) -> typing.Iterable[str]:
        """
        返回所有需要序列化的字段
        忽略受保护的字段（以_开头）
        忽略为None的字段
        忽略指定字段，_exclude_fields
        """
        return filter(
            lambda k: k not in self._exclude_fields and not k.startswith('_') and self.__dict__[k] is not None,
            self.__dict__)

    def __getitem__(self, key) -> typing.Any:
        return getattr(self, key)
